<!DOCTYPE html>
<!-- This test cannot be upstreamed to WPT because while a roughly
  equivalent version is available in the Web Platform Tests project, the
  limitations of the WPT infrastructure precludes the use of iframes for this
  purpose. This version should be maintained only insofar as the functionality
  under test concerns iframe contexts specifically; otherwise, modifications
  should be contributed to the shared version. -->
<title>register on a secure page after redirect from an non-secure url</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/get-host-info.js?pipe=sub"></script>
<script src="resources/test-helpers.js"></script>
<body>
<script>
'use strict';

// Loads a non-secure url in an iframe, which redirects to |target_url|.
// That page then registers a service worker, and messages back with the result.
// Returns a promise that resolves with the result.
function redirect_and_register(target_url) {
  var redirect_url = get_host_info()['UNAUTHENTICATED_ORIGIN'] +
    '/serviceworker/resources/redirect.php?Redirect=';
  var message_promise = new Promise(resolve => {
      window.addEventListener('message', e => resolve(e.data));
    });
  var iframe_promise = with_iframe(redirect_url + encodeURIComponent(target_url));
  return Promise.all([message_promise, iframe_promise])
    .then(results => {
        results[1].remove();
        return results[0];
      });
}

promise_test(function(t) {
    var target_url = window.location.origin +
      '/serviceworker/resources/register.html';

    return redirect_and_register(target_url)
      .then(result => { assert_equals(result, 'OK'); });
  }, 'register on a secure page after redirect from an non-secure url');

promise_test(function(t) {
    var target_url = get_host_info()['UNAUTHENTICATED_ORIGIN'] +
      '/serviceworker/resources/register.html';

    return redirect_and_register(target_url)
      .then(result => {
          assert_equals(result, 'FAIL: navigator.serviceWorker is undefined');
        });
  }, 'register on a non-secure page after redirect from an non-secure url');
</script>
</body>
